package services;

import java.util.Collection;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import repositories.MensajeRepository;
import domain.Administrador;
import domain.Mensaje;
import domain.Vecino;

@Service
@Transactional
public class MensajeService {
	@Autowired
	private MensajeRepository mensajeRepository;
	@Autowired
	private AdministradorService administradorService;

	@Autowired
	private VecinoService vecinoService;

	public MensajeService() {
		super();
	}

	public Mensaje create() {
		Mensaje res;
		Administrador principal;

		principal = administradorService.findByPrincipal();

		res = new Mensaje();

		res.setAdministrador(principal);

		return res;
	}

	public Collection<Mensaje> findAll() {
		Collection<Mensaje> res;
		res = mensajeRepository.findAll();
		return res;
	}

	public void save(Mensaje mensaje) {
		Assert.notNull(mensaje);
		Assert.notNull(mensaje.getVecino());
		Assert.isTrue(mensaje.getAdministrador().equals(
				administradorService.findByPrincipal()));
		Assert.isTrue(!mensaje.getAsunto().isEmpty());
		Assert.isTrue(!mensaje.getContenido().isEmpty());

		mensajeRepository.save(mensaje);
	}

	public Collection<Mensaje> findByAdministrador() {
		Collection<Mensaje> res;
		Administrador principal;
		principal = administradorService.findByPrincipal();
		Assert.isTrue(principal instanceof Administrador);
		res = mensajeRepository.findByAdministrador(principal.getId());
		return res;
	}

	public Collection<Mensaje> findByVecino() {
		Collection<Mensaje> res;
		Vecino principal;
		principal = vecinoService.findByPrincipal();
		res = mensajeRepository.findByVecino(principal.getId());

		return res;
	}

	public void delete(Mensaje m) {
		Assert.notNull(m);
		mensajeRepository.delete(m);
		
	}


}
